#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

#include <pthread.h>
// 小缓冲区
typedef struct
{
    // 内存指针
    char *ptr;
    // 总大小
    int total_size;
    // 数据长度
    int len;

} SubBuffer;

// 缓冲区
typedef struct
{
    // 包含2个子缓冲区的数组
    SubBuffer *sub_buffers[2];
    // 读的索引
    int read_index;
    // 写的索引
    int write_index;
    // 读锁
    pthread_mutex_t read_lock;
    // 写锁
    pthread_mutex_t write_lock;
} Buffer;

// 初始化缓冲区
Buffer *app_buffer_init(int total_size);

// 释放缓冲区
void app_buffer_free(Buffer *buffer);

/// @brief 写入数据
/// @param buffer 缓冲区指针
/// @param data 写入的数据
/// @param data_len 数据长度
/// @return    0 成功 -1 失败
int app_buffer_write(Buffer *buffer, char *data, int data_len);

/// @brief 读取数据
/// @param buffer 缓冲区指针
/// @param data_buf 接收数据容器
/// @param buf_len 容器大小
/// @return 读取到数据的长度，如果失败为 -1
int app_buffer_read(Buffer *buffer, char *data_buf, int buf_len);


#endif // __APP_BUFFER_H
